home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
HyperLib 1997 Winter - Disc 1
/
HYPERLIB-1997-Winter-CD1.ISO.7z
/
HYPERLIB-1997-Winter-CD1.ISO
/
オンラインウェア
/
PRG
/
Mac_F2C_1.3.2.sit
/
Mac F2C 1.3.2
/
Mac F2C Libraries
/
libF77 Sources
/
s_catow.c
< prev
next >
Wrap
Text File
|
1995-01-28
|
1KB
|
70 lines
/* Variant of s_cat that allows the target of a concatenation to */
/* appear on its right-hand side (contrary to the Fortran 77 Standard). */
#include "f2c.h"
#undef abs
#ifdef KR_headers
extern char *malloc();
extern void free();
#else
#include "stdlib.h"
#endif
#include "string.h"
static VOID
#ifdef KR_headers
s_cat0(lp, rpp, rnp, n, ll) char *lp, *rpp[]; ftnlen rnp[], n, ll;
#else
s_cat0(char *lp, char *rpp[], ftnlen rnp[], ftnlen n, ftnlen ll)
#endif
{
ftnlen i, nc;
char *rp;
for(i = 0 ; i < n ; ++i) {
nc = ll;
if(rnp[i] < nc)
nc = rnp[i];
ll -= nc;
rp = rpp[i];
while(--nc >= 0)
*lp++ = *rp++;
}
while(--ll >= 0)
*lp++ = ' ';
}
VOID
#ifdef KR_headers
s_cat(lp, rpp, rnp, np, ll) char *lp, *rpp[]; ftnlen rnp[], *np, ll;
#else
s_cat(char *lp, char *rpp[], ftnlen rnp[], ftnlen *np, ftnlen ll)
#endif
{
ftnlen i, L, m, n;
char *lpe, *rp;
n = *np;
lpe = lp;
L = ll;
i = 0;
while(i < n) {
rp = rpp[i];
m = rnp[i++];
if (rp >= lpe || rp + m <= lp) {
if ((L -= m) <= 0) {
n = i;
break;
}
lpe += m;
continue;
}
lpe = malloc(ll);
s_cat0(lpe, rpp, rnp, n, ll);
memcpy(lp, lpe, ll);
free(lpe);
return;
}
s_cat0(lp, rpp, rnp, n, ll);
}